Graphics processing units (GPUs) are widely used in computer systems for manipulating computer graphics and even for general-purpose computation. Many of these computer systems have to manage highly restricted hardware resources that are impacted by register allocation design. In these systems, in-order allocators, such as ring allocators, are sometimes used for resource allocation, owing to their simplicity. Some GPUs run multiple kinds of shaders in parallel for graphics and compute pipelines. In addition, multiple different shaders of each type may be active at any time. For these conditions, in-order allocators may not be the most efficient way to allocate resources.